package com.rabbit.eap.system.service;

import com.rabbit.eap.framework.common.api.ApiResult;
import com.rabbit.eap.framework.common.service.BaseService;
import com.rabbit.eap.system.dto.SysMenuDTO;
import com.rabbit.eap.system.entity.SysMenu;
import com.rabbit.eap.system.entity.SysUser;
import com.rabbit.eap.system.param.SysMenuPageParam;

import java.util.List;
import java.util.Set;

/**
 * @projectName: eap
 * @packageName: com.rabbit.eap.system.service
 * @className: ISysMenuService
 * @author： rabbit
 * @version： 1.0
 * @since： 2020/06/06 23:34:03
 * <p>Description:
 * 菜单 服务类
 * </p>

 */
public interface ISysMenuService extends BaseService<SysMenu> {


    /**
     * @Description: 添加菜单
     * @methodName: saveSysMenu
     * @param sysMenuDTO:sysMenuDTO数据传输对象
     * @return: ApiResult
     * @throws Exception
     * @date: 2020/06/06 23:34:03
     * @author: rabbit
     */
    ApiResult saveSysMenu(SysMenuDTO sysMenuDTO) throws Exception;


    /**
     * @Description: 修改菜单
     * @methodName: modifySysMenu
     * @param  sysMenuDTO:sysMenuDTO数据传输对象
     * @return: ApiResult
     * @throws Exception
     * @date: 2020/06/06 23:34:03
     * @author: rabbit
     */
    ApiResult modifySysMenu(SysMenuDTO sysMenuDTO) throws Exception;

    /**
     * @Description: 删除菜单
     * @methodName: removeSysMenu
     * @param menuId:菜单Id
     * @return: ApiResult.result(flag)
     * @throws Exception
     * @date: 2020/06/06 23:34:03
     * @author: rabbit
     */
    ApiResult removeSysMenu(Long menuId) throws Exception;

    /**
     * @Description: 根据Id获取菜单详情
     * @methodName: getSysMenuInfo
     * @param id: id
     * @return:  SysMenuVO
     * @throws Exception
     * @date: 2020/06/06 23:34:03
     * @author: rabbit
     */
    ApiResult getSysMenuById(Long id) throws Exception;

    /**
     * @Description: 菜单分页列表
     * @methodName: getSysMenuPageList
     * @param sysMenuPageParam
     * @return: Paging<SysMenuVO>
     * @throws Exception
     * @date: 2020/06/06 23:34:03
     * @author: rabbit
     */
    ApiResult getSysMenuPageList(SysMenuPageParam sysMenuPageParam) throws Exception;

    /**
     * @Description: 菜单分页列表
     * @methodName: selectMenuPermsByUserId
     * @param userId:用户Id
     * @return: java.util.Set<java.lang.String>
     * @date: 2020/6/6 23:24
     * @author: rabbit
     *
     */
    Set<String> selectMenuPermsByUserId(Long userId);

    ApiResult getRoleMenuTree(Long roleId);

    ApiResult getSysMenuList(SysMenu sysMenu);

    ApiResult getTreeMenu(SysMenu sysMenu);

    List<SysMenu> selectMenusByUser(SysUser sysUser);

    ApiResult getSysMenuAll(SysMenu sysMenu);

    ApiResult getRoleMenu(Long roleId);
}
